import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import AutoImport from "unplugin-auto-import/vite";
import { join } from "path";

export default defineConfig(({ mode }) => {
  // 获取`.env`环境配置文件
  const env = loadEnv(mode, process.cwd());
  return {
    base: env.VITE_BASE_PATH,
    plugins: [
      vue(),
      // 解决 `import { ref , reactive ..... } from 'vue'` 大量引入的问题
      AutoImport({
        imports: ["vue", "vue-router"], //自动引入
      }),
    ],
    resolve: {
      // 配置路径别名
      alias: {
        "@": join(__dirname, "src"),
        "@api": join(__dirname, "src/api"),
        "@utils": join(__dirname, "src/utils"),
      },
    },
    // 反向代理解决跨域问题
    server: {
      headers: {
        "Access-Control-Allow-Origin": "*"
      },
      host: "0.0.0.0", // 局域网别人也可访问
      port: Number(env.VITE_APP_PORT), //端口号
      open: true, // 运行时自动打开浏览器
      cors: true, // 允许跨域
      https: false, // 是否开启https
      proxy: {
        [env.VITE_APP_BASE_API]: {
          target: env.VITE_APP_SERVICE_API,
          changeOrigin: true,
          rewrite: (path) =>
            path.replace(new RegExp("^" + env.VITE_APP_BASE_API), ""),
        },
      },
    },
    //打包配置
    build: {
      outDir: env.VITE_OUT_DIR || "dist",
      terserOptions: {
        compress: {
          drop_debugger: env.VITE_DROP_DEBUGGER === "true", //打包时删除console
          drop_console: env.VITE_DROP_CONSOLE === "true", //打包时删除console
          pure_funcs: ["console.log"],
        },
        output: {
          comments: true, // 去掉注释内容
        }
      },
    },
    css: {
      preprocessorOptions: {
        scss: {
          // quietDeps: true, // 可以尝试，但在高版本中似乎不起作用
          //silenceDeprecations: ['legacy-js-api'],
          api: 'modern-compiler', // or 'modern'
        },
      },
    },
    reportCompressedSize: false, // 禁用 gzip 压缩大小报告，可略微减少打包时间
    // 规定触发警告的 chunk 大小
    chunkSizeWarningLimit: 2000,
    rollupOptions: {
      output: {
        // js最小拆包
        manualChunks(id) {
          if (id.includes('node_modules')) {
            return id
              .toString()
              .split('node_modules/')[1]
              .split('/')[0]
              .toString()
          }
          // if (id.includes("node_modules")) {
          //   return id.toString().split("node_modules/")[1].split("/")[0].toString();
          // }
        },
        // 静态资源分类和包装
        chunkFileNames: (chunkInfo) => {
          //分隔自己项目的文件
          const facadeModuleId = chunkInfo.facadeModuleId
            ? chunkInfo.facadeModuleId.split('/')
            : []
          return `js/${facadeModuleId[facadeModuleId.length - 2] || '[name]'}/[name].[hash].js`
        },
        entryFileNames: "assets/js/[name]-[hash].js",
        assetFileNames: "assets/[ext]/[name]-[hash].[ext]"
      }
    }
  };
});
